home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / util / moni / Scout-src.lha / source / objects / fontdisplay_class.c next >
Encoding:
C/C++ Source or Header  |  2002-09-17  |  4.6 KB  |  152 lines

  1. #include "system_headers.h"
  2.  
  3. static ULONG __saveds mNew( struct IClass *cl,
  4.                             Object *obj,
  5.                             Msg msg )
  6. {
  7.     struct FontDisplayData *fdd;
  8.     struct TagItem *tags, *tag;
  9.  
  10.     if (!(obj = (Object *)DoSuperMethodA(cl, obj, msg)))
  11.         return(0);
  12.  
  13.     fdd = INST_DATA(cl, obj);
  14.  
  15.     /* parse initial taglist */
  16.  
  17.     for (tags = ((struct opSet *)msg)->ops_AttrList; tag = NextTagItem(&tags); ) {
  18.         switch (tag->ti_Tag) {
  19.             case MUIA_FontDisplay_Font:
  20.                 if (tag->ti_Data) fdd->fdd_Font = (struct TextFont *)tag->ti_Data;
  21.                 break;
  22.  
  23.             case MUIA_FontDisplay_Text:
  24.                 if (tag->ti_Data) _strcat(&fdd->fdd_Text, (STRPTR)tag->ti_Data);
  25.                 break;
  26.         }
  27.     }
  28.  
  29.     return (ULONG)obj;
  30. }
  31.  
  32. static ULONG __saveds mSet( struct IClass *cl,
  33.                             Object *obj,
  34.                             Msg msg )
  35. {
  36.     struct FontDisplayData *fdd = INST_DATA(cl, obj);
  37.     struct TagItem *tags, *tag;
  38.  
  39.     for (tags = ((struct opSet *)msg)->ops_AttrList; tag = NextTagItem(&tags); ) {
  40.         switch (tag->ti_Tag) {
  41.             case MUIA_FontDisplay_Font:
  42.                 if (tag->ti_Data) {
  43.                     fdd->fdd_Font = (struct TextFont *)tag->ti_Data;
  44.                     MUI_Redraw(obj, MADF_DRAWOBJECT); /* redraw ourselves completely */
  45.                 }
  46.                 break;
  47.  
  48.             case MUIA_FontDisplay_Text:
  49.                 if (tag->ti_Data) {
  50.                     _strcat(&fdd->fdd_Text, (STRPTR)tag->ti_Data);
  51.                     MUI_Redraw(obj, MADF_DRAWOBJECT); /* redraw ourselves completely */
  52.                 }
  53.                 break;
  54.         }
  55.     }
  56.  
  57.     return (DoSuperMethodA(cl,obj,msg));
  58. }
  59.  
  60.  
  61. static ULONG __saveds mGet( struct IClass *cl,
  62.                             Object *obj,
  63.                             Msg msg )
  64. {
  65.     struct FontDisplayData *fdd = INST_DATA(cl, obj);
  66.     ULONG *store = ((struct opGet *)msg)->opg_Storage;
  67.  
  68.     switch (((struct opGet *)msg)->opg_AttrID) {
  69.         case MUIA_FontDisplay_Font:
  70.             *store = (ULONG)fdd->fdd_Font; return (TRUE);
  71.             break;
  72.  
  73.         case MUIA_FontDisplay_Text:
  74.             *store = (ULONG)fdd->fdd_Text; return (TRUE);
  75.             break;
  76.     }
  77.  
  78.     return (DoSuperMethodA(cl, obj, msg));
  79. }
  80.  
  81.  
  82. static ULONG __saveds mAskMinMax( struct IClass *cl,
  83.                                   Object *obj,
  84.                                   struct MUIP_AskMinMax *msg )
  85. {
  86.     DoSuperMethodA(cl, obj, msg);
  87.  
  88.     msg->MinMaxInfo->MinWidth  += 100;
  89.     msg->MinMaxInfo->DefWidth  += 100;
  90.     msg->MinMaxInfo->MaxWidth  += 1000;
  91.  
  92.     msg->MinMaxInfo->MinHeight += 60;
  93.     msg->MinMaxInfo->DefHeight += 60;
  94.     msg->MinMaxInfo->MaxHeight += 1000;
  95.  
  96.     return(0);
  97. }
  98.  
  99. static ULONG __saveds mDraw( struct IClass *cl,
  100.                              Object *obj,
  101.                              struct MUIP_Draw *msg )
  102. {
  103.     struct FontDisplayData *fdd = INST_DATA(cl, obj);
  104.  
  105.     DoSuperMethodA(cl, obj, msg);
  106.  
  107.     if (fdd->fdd_Font != NULL && fdd->fdd_Text != NULL) {
  108.         struct Region *newRegion;
  109.  
  110.         SetFont(_rp(obj), fdd->fdd_Font);
  111.         SetAPen(_rp(obj), 1);
  112.  
  113.         if (newRegion = NewRegion()) {
  114.             struct Rectangle rect;
  115.             struct Region *oldRegion;
  116.  
  117.             rect.MinX = _mleft(obj);
  118.             rect.MaxX = _mright(obj);
  119.             rect.MinY = _mtop(obj);
  120.             rect.MaxY = _mbottom(obj);
  121.             OrRectRegion(newRegion, &rect);
  122.  
  123.             oldRegion = InstallClipRegion(_window(obj)->WLayer, newRegion);
  124.             if (fdd->fdd_Font->tf_YSize > _mheight(obj)) {
  125.                 Move(_rp(obj), _mleft(obj), _mtop(obj) + fdd->fdd_Font->tf_Baseline);
  126.             } else {
  127.                 Move(_rp(obj), _mleft(obj), _mtop(obj) + ((_mheight(obj) - fdd->fdd_Font->tf_YSize) / 2) + fdd->fdd_Font->tf_Baseline);
  128.             }
  129.             Text(_rp(obj), fdd->fdd_Text, strlen(fdd->fdd_Text));
  130.             InstallClipRegion(_window(obj)->WLayer, oldRegion);
  131.         }
  132.     }
  133.  
  134.     return(0);
  135. }
  136.  
  137. ULONG __asm __saveds FontDisplayDispatcher( register __a0 struct IClass *cl,
  138.                                             register __a2 Object *obj,
  139.                                             register __a1 Msg msg )
  140. {
  141.     switch (msg->MethodID) {
  142.         case OM_NEW        : return (mNew      (cl, obj, (APTR)msg));
  143.         case OM_SET        : return (mSet      (cl, obj, (APTR)msg));
  144.         case OM_GET        : return (mGet      (cl, obj, (APTR)msg));
  145.         case MUIM_AskMinMax: return (mAskMinMax(cl, obj, (APTR)msg));
  146.         case MUIM_Draw     : return (mDraw     (cl, obj, (APTR)msg));
  147.     }
  148.  
  149.     return (DoSuperMethodA(cl, obj, msg));
  150. }
  151.  
  152.